#include "app_runner.h"
#include "app_device.h"
#include "unistd.h"
#include "app_pool.h"
#include "app_mqtt.h"
#include "app_bt.h"
#include "app_serial.h"
#include <signal.h>
#include "log.h"

static int is_running = 1;

void signal_handler(int signum)
{
	is_running = 0;
}

/**
 * 启动应用程序
 */
void app_runner_start()
{
	// ctrl+c  kill
	signal(SIGINT, signal_handler);	 // ctr+c
	signal(SIGTERM, signal_handler); // kill
	// 如果 外部传递的信号如果kill -9 //无法检测到 也就无法执行对应资源回收

	// 0 初始化线程池 和 消息队列模块
	int ret = app_pool_init(THREAD_NUM);
	if (ret == 0)
	{
		log_info("初始化线程池 成功");
	}
	ret = app_mqtt_init();
	if (ret == 0)
	{
		log_info("初始化消息队列 成功");
	}
	// 1 初始化设备
	device_t *device = app_device_init(DEVICE_FILE);
	if (device != NULL)
	{
		log_info("初始化设备成功");
	}
	// 1.5 对设备结构体进行蓝牙设置
	ret = app_serial_init(device);
	if (ret == 0)
	{
		log_info("初始化串口 成功");
	}
	ret = app_bt_init(device);
	if (ret == 0)
	{
		log_info("初始化蓝牙配置 成功");
	}

	// 2 启动设备
	ret = app_device_start();
	if (ret == 0)
	{
		log_info("设备启动 成功");
	}

	while (is_running)
	{
		sleep(1);
	}
	// 4 销毁设备
	app_device_destroy();
	app_pool_destroy();
	app_mqtt_destroy();

}
